package cn.csc.module.shoppingCard.api.transaction.dto;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Range;

import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.time.LocalDateTime;

/**
* 交易记录创建 DTO
* 如果子 VO 存在差异的字段，请不要添加到这里，影响 Swagger 文档生成
*/
@Data
public class CardTransactionCreateReqDTO {


    @ApiModelProperty(value = "关联的卡号")
    @NotNull(message = "关联的卡号不能为空")
    private BigInteger cardId;

    /**
     * 交易类型（1-充值，2-消费，3-退款，4-冻结，5-解冻）
     */
    @ApiModelProperty(value = "交易类型（1-充值，2-消费，3-退款，4-冻结，5-解冻）")
    @Range(max = 5, min = 1, message = "交易类型的值在1到5之间")
    private Byte txnType;

    @ApiModelProperty(value = "交易金额（正数表示收入，负数表示支出）")
    @NotNull(message = "交易金额不能为空")
    private BigDecimal amount;

    @ApiModelProperty(value = "店铺ID")
    @NotNull(message = "店铺ID")
    private BigInteger shopId;

    @ApiModelProperty(value = "关联的订单号")
    @NotNull(message = "关联的订单号不能为空")
    private BigInteger relatedOrder;

    /**
     * 关联的订单子项ID
     */
    @ApiModelProperty(value = "关联的订单子项ID")
    @NotNull(message = "关联的订单子项ID不能为空")
    private BigInteger relatedOrderItem;

    @ApiModelProperty(value = "交易时间")
    @NotNull(message = "交易时间不能为空")
    private LocalDateTime txnTime;

    @ApiModelProperty(value = "备注（如充值渠道、消费商户信息）")
    private String remark;
}
